/*
 * To change this template, choose Tools | Templates
 * and open the template in the editor.
 */
package br.ctu.labiras.agente;

import br.ctu.labiras.ambiente.Estado;
import com.sun.org.apache.xalan.internal.xsltc.runtime.Hashtable;
import java.util.ArrayList;
import java.util.Random;

/**
 * @author Thiago
 * Agente Reativo Simples com as seguintes regras:
 *  Sujo -> Não operar ou 
 *  Sujo -> Mover ou
 *  Sujo -> Aspirar 
 *  Limpo -> Não operar ou
 *  Limpo -> Mover ou
 *  Limpo -> Aspirar 
 */
public class AgReativoSimplesRegraLocalAleatoria extends AgReativoSimples{    
    
    @Override
    public Hashtable obtemRegras() {     
            Hashtable rules = new Hashtable();
            
            rules.put(0, Acao.MOVER); //0 = Mover
            rules.put(1, Acao.ASPIRAR); //1 = Limpar
            rules.put(2, Acao.NAO_OP); //2 = Não Operar             
            
            return rules;
    }
    
    @Override
    protected Acao obtemAcao(Estado estadoAmbiente) {
        Acao acao = null;
        
        regras = obtemRegras();
        if (estadoAmbiente.getCenario() == null) {
            return Acao.PARAR;
        }
        acao = (Acao) regras.get(new Random().nextInt(regras.size()));
        
        if (acao == Acao.MOVER) {
            ArrayList<Acao> movimentos = definirMovimento(estadoAmbiente);
            acao = obtemDirecao(estadoAmbiente, movimentos);            
        }
        /*System.out.println("++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++");
        System.out.println("Celula: " + estadoAmbiente.getCenario()[estadoAmbiente.getPosicaoLinha()][estadoAmbiente.getPosicaoColuna()] +  ", acão: " + acao.toString());
        System.out.println("++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++");*/
        return acao;
    }
}
